Debugging software (e.g., a debugger) effectuates correction of problems in software by finding errors in program logic, and in hardware by finding errors in circuitry. Debuggers can be used to stop programs at certain breakpoints and display various programming elements. This allows programmers to step through program source code statements individually and sequentially, while corresponding machine instructions are being executed and observed, and correct and/or modify the code as necessary.
Conventional debuggers operate to stop programs at the breakpoints by implementing system management interrupts (SMI) or similar functions. However, SMIs and similar approaches to halting program execution at breakpoints are effective in situations wherein the debugger program is run on the same computer executing the machine instructions. Ordinarily, this approach is sufficient for most conventional debugging applications, because the single machine architecture is quite typical.
However, in a distributed hardware architectural environment, the approach becomes problematic. One such architecture may constitute several different devices, operating at different speeds and with vast differences in computational characteristics. Such characteristics include, but are not limited to, processing power and memory, and even internal structure and function. Further, some of the devices may incorporate functionalities not amenable to simulation via the debugger.
For instance, one model may incorporate a host computer as a platform for the debugger software and an external circuit or other computer, upon which the debugging program is executed. An in-circuit emulator (ICE) may be deployed in this model, to facilitate debugging and other testing of the external circuit or computer. Such external circuits or computers may include analog and/or other functionalities, which the debugger is unable to test.
The components of this model differ in both the dimensions of speed and computing power as follows. In the circuit or computer being debugged, operations occur fast, at hardware level speeds. However, the circuit may be of relatively limited computational capacity and specific computing function. The ICE may share similar such attributes.
The host computer may have vastly superior computational resources vis-à-vis the computer/circuit being debugged and/or the ICE, with much more powerful processors and memory. Furthermore, the host computer may deploy the debugger via an application. For example, if the host computer is a PC, the debugger may be run by a Windows™ application. Thus, the debugger software therein may be constrained to run at a relatively slow speed, despite the speed of the host computer's processors. This speed may be limited to the speed of the application deploying it.
In order to test functionalities not amenable to simulation via the debugger, such as analog systems, conventional testing requires the use of special hardware. Certain conventional emulators may be designed and applied to achieve real analog circuit testing performance during debugging. However, these conventional emulators require the addition of a significant degree of complex debugging circuitry to the system to be debugged. This is expensive, resource intensive, and complicated.
Conventional debuggers may allow modification of code during the debugging sessions. However, this is only achievable conventionally with two further expenses. First, complicated debugging hardware may be required, as discussed above. Second, in each and every instance that code is modified during a debugging session, the debugging session must be reset. For instance, the debugging session cannot continue executing; it must begin anew at its initial steps. This is labor intensive, expensive, and requires inordinate amounts of time.
In a distributed hardware, the emulator needs to execute in lock step with the processor under test, according to the overall debug framework. However, certain functions of the microprocessor may be inaccessible to the emulator, and thus to the debugger. Thus, remaining synchronized may be problematic for the microprocessor and emulator, when executing functions requiring calls to host computer in conventional schemes.
Debugging in accordance with the conventional art is problematic therefore for a number of reasons. Conventional debugging is not easily open to efficient utilization in a distributed hardware environment. Conventional debugging may also require special hardware to implement special functions not amenable to debugging per se and/or to allow code modification during debugging. Further, code modifications during debugging sessions require restarting the session, and repeating. These problems render debugging in a distributed hardware environment by conventional means expensive, time consuming, resource intensive, and laborious.